//
//  UIImage+GaussianBlur.m
//  图像模糊
//
//  Created by liuchang on 15/1/4.
//  Copyright (c) 2015年 liuchang. All rights reserved.
//

#import "UIImage+GaussianBlur.h"

@implementation UIImage (GaussianBlur)

+ (UIImage *)imageWithBlurImageNamed:(UIImage *)theImage intputRadius:(CGFloat)radius
{
    
//  CIContext. 所有图像处理都是在一个CIContext 中完成的
    CIContext *context = [CIContext contextWithOptions:nil];

//  CIImage. 这个类保存图像数据。它可以从UIImage、图像文件、或者是像素数据中构造出来。
    CIImage *inputImage = [CIImage imageWithCGImage:theImage.CGImage];

//  CIFilter. 滤镜类包含一个字典结构，对各种滤镜定义了属于他们各自的属性。滤镜有很多种，比如鲜艳程度滤镜，色彩反转滤镜，剪裁滤镜等等。
    CIFilter *blurFilter1 = [CIFilter filterWithName:@"CIGaussianBlur"];
    
    // filter是按照名字来创建的CIGaussianBlur不能更改
    [blurFilter1 setValue:inputImage forKey:kCIInputImageKey];
    [blurFilter1 setValue:[NSNumber numberWithFloat:radius] forKey:@"inputRadius"];
    
    // 修改radius可以更改模糊程度
    CIImage *result = [blurFilter1 valueForKey:kCIOutputImageKey];
    
    
    CGImageRef cgImage = [context createCGImage:result fromRect:[inputImage extent]];
    
    UIImage *returnImage = [UIImage imageWithCGImage:cgImage];
    CGImageRelease(cgImage);
    // 即使使用ARC也要加上这个release，因为ARC不管理CGImageRef，不释放会内存泄露
    return returnImage;
}

@end
